package stage_1_module_3.code.homework_5;

import java.util.Set;
import java.util.TreeSet;
import java.util.List;

/***
 *  使用集合实现斗地主游戏的部分功能，要求如下： 
 （1）首先准备 54 张扑克牌并打乱顺序。 
 （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。 
 （3）查看三个玩家手中的扑克牌和底牌。 
 （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下： 
    手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 * 
 * 思路:
 * 1.定义一个卡牌类型，包含卡牌名称，花色，比较的数字大小(以10为梯度，同一数字的按照红桃，方块，梅花，黑桃的顺序显示)
 * 2.声明卡牌创建的两种方式，无花色Card(code), 带花色Card(code,color)两种方式
 * 3.给Card类实现比较接口的两个方法compareTo(o)和compare(o1,o2)
 * 4.重写Card类的toString方法，输出花色+卡牌名称
 * 5.初始化一个卡牌列表lc，依次添加大王，小王，2，A...3的各种花色卡牌
 * 6.使用随机算法打乱lc排序
 * 7.循环17次，每次给三个有序集合s1,s2,s3从lc牌顶抽取一张卡牌
 * 8.打印s1,s2,s3的卡牌和底牌
 * 
 */
public class Answer {
    public static void main(String[] args) {
        Set<Card> s1 = new TreeSet<>();
        Set<Card> s2 = new TreeSet<>();
        Set<Card> s3 = new TreeSet<>();

        //创建54张卡牌的列表
        List<Card> lc = Opt.init();

        //打乱卡牌顺序
        Opt.shuffle(lc);
        System.out.println("打乱后卡牌顺序:"+lc);

        //发牌17次，每次从lc顶部给s1,s2,s3有序集合发牌
        for (int i=1; i<=17; i++) {
            Opt.sendCard(lc, s1);
            Opt.sendCard(lc, s2);
            Opt.sendCard(lc, s3);
        }

        //打印三副手牌
        System.out.println("一号手牌:"+s1);
        System.out.println("二号手牌:"+s2);
        System.out.println("三号手牌:"+s3);
        //显示底牌
        System.out.println("底牌"+lc);
    }
    
}
